#include "mainwidget.h"
#include "./ui_mainwidget.h"

#include <QIcon>
#include <QLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>

#define TEST_UI

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MainWidget)
{
    ui->setupUi(this);

    this->setWindowTitle("聊天室");
    this->setWindowIcon(QIcon("://res/image/chat.png"));

    // 初始化
    // 主窗口的样式布局
    initWindowMain();
    // 左侧 导航栏样式布局
    initWindowLeft();
    // 中间 信息布局
    initWindowMid();
    // 右侧 实际内容布局
    initWindowRight();
    // 信号槽
    initSignalSlot();
    // websocket
    initWebSocket();
}

// 初始化实例
MainWidget* MainWidget::instance = nullptr;
MainWidget *MainWidget::getInstance()
{
    // 懒汉模式
    if(instance == nullptr) {
        // 主窗口 //
        instance = new MainWidget(); // parent传为空，即以当前桌面为父窗口
    }
    return instance;
}

void MainWidget::initWindowMain()
{
    // 水平布局
    QHBoxLayout* layout = new QHBoxLayout();
    // 设置 控件边距
    layout->setSpacing(0);
    // 四个方向的边距
    layout->setContentsMargins(0,0,0,0);
    this->setLayout(layout);

    // 初始化子窗口
    window_left = new QWidget;
    window_mid = new QWidget;
    window_right = new QWidget;

    window_left->setFixedWidth(70);
    window_mid->setFixedWidth(300);
    window_right->setMinimumWidth(90);

    window_left->setStyleSheet("QWidget { background-color: rgb(46, 46, 46); }");
    window_mid->setStyleSheet("QWidget { background-color: rgb(247, 247, 247); }");
    window_right->setStyleSheet("QWidget { background-color: rgb(245, 245, 245); }");

    layout->addWidget(window_left);
    layout->addWidget(window_mid);
    layout->addWidget(window_right);
}

void MainWidget::initWindowLeft()
{
    QVBoxLayout* layout = new QVBoxLayout();
    layout->setSpacing(20);
    layout->setContentsMargins(0,50,0,0);
    window_left->setLayout(layout);

    // 添加用户头像
    userAvatar = new QPushButton();
    userAvatar->setFixedSize(45, 45); // 固定大小
    userAvatar->setIconSize(QSize(45, 45)); // icon大小
    userAvatar->setIcon(QIcon("://res/image/default_avatar.png")); // 默认头像
    userAvatar->setStyleSheet("QPushButton { background-color: transparent; }");
    layout->addWidget(userAvatar, 1, Qt::AlignTop | Qt::AlignHCenter); // (控件，拉伸系数，置顶居中)

    // 添加会话标签页按钮
    sessionTabBtn = new QPushButton();
    sessionTabBtn->setFixedSize(45, 45); // 固定大小
    sessionTabBtn->setIconSize(QSize(45, 45)); // icon大小
    sessionTabBtn->setIcon(QIcon("://res/image/session.png")); // 默认头像
    sessionTabBtn->setStyleSheet("QPushButton { background-color: transparent; }");
    layout->addWidget(sessionTabBtn, 1, Qt::AlignTop | Qt::AlignHCenter); // (控件，拉伸系数，置顶居中)

    // 添加好友标签页按钮
    friendTabBtn = new QPushButton();
    friendTabBtn->setFixedSize(45, 45); // 固定大小
    friendTabBtn->setIconSize(QSize(45, 45)); // icon大小
    friendTabBtn->setIcon(QIcon("://res/image/friend.png")); // 默认
    friendTabBtn->setStyleSheet("QPushButton { background-color: transparent; }");
    layout->addWidget(friendTabBtn, 1, Qt::AlignTop | Qt::AlignHCenter); // (控件，拉伸系数，置顶居中)

    // 添加好友申请标签页按钮
    applyTabBtn = new QPushButton();
    applyTabBtn->setFixedSize(45, 45); // 固定大小
    applyTabBtn->setIconSize(QSize(45, 45)); // icon大小
    applyTabBtn->setIcon(QIcon("://res/image/apply.png")); // 默认
    applyTabBtn->setStyleSheet("QPushButton { background-color: transparent; }");
    layout->addWidget(applyTabBtn, 1, Qt::AlignTop | Qt::AlignHCenter); // (控件，拉伸系数，置顶居中)

    layout->addStretch(20); // 总拉伸系数
}

void MainWidget::initWindowMid()
{
    // 布局
    QGridLayout* layout = new QGridLayout();
    layout->setContentsMargins(0,0,20,0);
    layout->setHorizontalSpacing(0);
    layout->setVerticalSpacing(10);
    window_mid->setLayout(layout);
    // 搜索框
    search_edit = new QLineEdit();
    search_edit->setFixedHeight(40);
    search_edit->setPlaceholderText("点击进行搜索");
    search_edit->setStyleSheet("QLineEdit{ border-radius: 5px; background-color: rgb(226, 226, 226); padding-left: 5px;}");
    // 添加好友按钮
    add_friend_btn = new QPushButton();
    add_friend_btn->setFixedSize(30, 30);
    add_friend_btn->setIcon(QIcon("://res/image/add_friend.png"));
    QString style = "QPushButton { border-radius: 5px; background-color: rgb(226, 226, 226); }";
    style += " QPushButton:pressed { background-color: rgb(240, 240, 240); }";
    add_friend_btn->setStyleSheet(style);

    friend_session_area = new FriendSessionArea();

    // 创建空白widget 填充到布局管理器
    QWidget* spacer1 = new QWidget();
    spacer1->setFixedWidth(10);
    QWidget* spacer2 = new QWidget();
    spacer2->setFixedWidth(10);
    QWidget* spacer3 = new QWidget();
    spacer3->setFixedWidth(10);

    layout->addWidget(spacer1, 0, 0);
    layout->addWidget(search_edit, 0, 1);
    layout->addWidget(spacer2, 0, 2);
    layout->addWidget(add_friend_btn, 0, 3);
    layout->addWidget(spacer3, 0, 4);
    layout->addWidget(friend_session_area, 1, 0, 1, 5);
}

void MainWidget::initWindowRight()
{
    // 创建布局管理器（垂直）
    QVBoxLayout* vlayout = new QVBoxLayout();
    vlayout->setSpacing(0);
    vlayout->setContentsMargins(0, 0, 0, 0);
    vlayout->setAlignment(Qt::AlignTop);

    // 将布局设置给 window_right
    window_right->setLayout(vlayout);

    // 创建标题栏
    QWidget* titleWidget = new QWidget();
    titleWidget->setFixedHeight(65);
    titleWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    titleWidget->setObjectName("会话标题栏");
    titleWidget->setStyleSheet("#titleWidget { border-bottom: 1px solid rgb(230, 230, 230); border-left: 1px solid rgb(230, 230, 230); }");

    // 向标题栏添加标签和按钮
    QHBoxLayout* hlayout = new QHBoxLayout();
    hlayout->setSpacing(0);
    hlayout->setContentsMargins(10, 0, 10, 0);
    titleWidget->setLayout(hlayout);

    session_title_label = new QLabel();
    session_title_label->setStyleSheet("QLabel { font-size: 22px; }");

#ifdef TEST_UI
    session_title_label->setText("会话标题");
#endif

    hlayout->addWidget(session_title_label);

    session_title_btn = new QPushButton();
    session_title_btn->setFixedSize(30, 30);
    session_title_btn->setIconSize(QSize(30, 30));
    session_title_btn->setIcon(QIcon(":/res/image/more.png"));
    session_title_btn->setStyleSheet("QPushButton { border:none; background-color: rgb(245, 245, 245); } QPushButton:pressed { background-color: rgb(220, 220, 220); }");
    hlayout->addWidget(session_title_btn);

    // 将标题栏添加到垂直布局
    vlayout->addWidget(titleWidget);

    qDebug() << "已将标题栏添加到垂直布局，项数量:" << vlayout->count();
    qDebug() << "窗口右侧可见性:" << window_right->isVisible();
}


void MainWidget::initSignalSlot()
{

}

void MainWidget::initWebSocket()
{

}

MainWidget::~MainWidget()
{
    delete ui;
}
